package ca.uvic.cs.cogz.util;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.lang.reflect.Method;

import javax.swing.JOptionPane;

import ca.uvic.cs.cogz.PromptUIPlugin;
import ca.uvic.cs.cogz.reports.AbstractReport;
import edu.stanford.smi.protegex.prompt.plugin.PluginManager;

public class BrowserLaunch {
	private static final String errMsg = "Error attempting to launch web browser";

	public static void showReport(AbstractReport report) {
		try {
			File file = new File(PluginManager.getPromptPluginsDirectory() + PromptUIPlugin.class.getPackage().getName() + File.separatorChar + "report" + System.currentTimeMillis() + ".html");
			FileWriter outFile = new FileWriter(file);
			PrintWriter out = new PrintWriter(outFile);
			out.print(report.getReportAsHTML());
			out.close();

			openURL(file.toURI().toURL().toExternalForm());
		} catch (IOException e) {
			//  Auto-generated catch block
			e.printStackTrace();
		}
	}

	@SuppressWarnings("unchecked")
	public static void openURL(String url) {
		String osName = System.getProperty("os.name");
		try {
			if (osName.startsWith("Mac OS")) {
				Class fileMgr = Class.forName("com.apple.eio.FileManager");
				Method openURL = fileMgr.getDeclaredMethod("openURL", new Class[] { String.class });
				openURL.invoke(null, new Object[] { url });
			} else if (osName.startsWith("Windows")) {
				Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + url);
			} else { //assume Unix or Linux 
				String[] browsers = { "firefox", "opera", "konqueror", "epiphany", "mozilla", "netscape" };
				String browser = null;
				for (int count = 0; count < browsers.length && browser == null; count++) {
					if (Runtime.getRuntime().exec(new String[] { "which", browsers[count] }).waitFor() == 0) {
						browser = browsers[count];
					}
				}
				if (browser == null) {
					throw new Exception("Could not find web browser");
				} else {
					Runtime.getRuntime().exec(new String[] { browser, url });
				}

			}
		} catch (Exception e) {
			JOptionPane.showMessageDialog(null, errMsg + ":\n" + e.getLocalizedMessage());
		}
	}

	public static void removeReports() {
		File dir = new File(PluginManager.getPromptPluginsDirectory() + PromptUIPlugin.class.getPackage().getName() + File.separatorChar);
		for (File f : dir.listFiles()) {
			if (f.getName().contains("report") && f.getName().endsWith(".html")) {
				f.delete();
			}
		}
	}
}
